import type { IStorage } from '../types';

// ObjectStorageImpl 实现了 IStorage 接口，使用对象存储键值对
class ObjectStorageImpl implements IStorage {
  /** 内部存储对象，键为字符串，值为字符串 */
  private obj: { [key: string]: string };

  /** 构造函数，初始化内部存储对象 */
  constructor() {
    this.obj = {};
  }

  /**
   * 设置指定键的值
   *
   * @param key 键名，字符串类型
   * @param value 值，字符串类型
   * @returns 无返回值
   */
  setItem(key: string, value: string): void {
    this.obj[key] = value;
  }

  /**
   * 获取指定键的值
   *
   * @param key 键名，字符串类型
   * @returns 对应的值，若不存在则返回 null
   */
  getItem(key: string): string | null {
    return key in this.obj ? this.obj[key] : null;
  }

  /**
   * 移除指定键及其对应的值
   *
   * @param key 键名，字符串类型
   * @returns 无返回值
   */
  removeItem(key: string): void {
    // const { [key]: _, ...rest } = this.obj;
    // this.obj = { ...rest };

    delete this.obj[key];
  }

  /**
   * 清空所有存储项
   *
   * @returns 无返回值
   */
  clear(): void {
    this.obj = {};
  }

  /**
   * 检查指定键是否存在
   *
   * @param key 键名，字符串类型
   * @returns 存在返回 true，否则返回 false
   */
  keyExists(key: string): boolean {
    return key in this.obj;
  }
}

export default ObjectStorageImpl;
